package day1.HomeWork;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * ClassName：Test4Client
 *
 * @Author：小鱼
 * @Create：2025-08-25 16:48
 */
public class Test4Client {
    /*
    (2)搭建一个客户端，要求如下:
      ①接收键盘录入信息然后发给服务器
      ②如果录入的字符串是quit，则发送后结束录入，关闭客户端
      ③客户端收取服务器返回的数据并输出显式
    */
    public static void main(String[] args) {
        String serverAddress = "127.0.0.1";
        int serverPort = 8990; // 修改端口号为8990

        try (Socket socket = new Socket(serverAddress, serverPort);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             Scanner scanner = new Scanner(System.in)) {

            System.out.println("已连接到服务器，输入消息发送（输入quit退出）：");

            // 创建线程用于接收服务器消息
            Thread receiveThread = new Thread(() -> {
                try {
                    String response;
                    while ((response = in.readLine()) != null) {
                        System.out.println(response);
                        // 如果收到服务器的关闭通知，退出
                        if (response.contains("连接将关闭")) {
                            System.exit(0);
                        }
                    }
                } catch (IOException e) {
                    System.out.println("与服务器的连接已关闭");
                }
            });
            receiveThread.start();

            // 读取键盘输入并发送到服务器
            String userInput;
            while (scanner.hasNextLine()) {
                userInput = scanner.nextLine();
                out.println(userInput);

                // 如果输入quit，退出循环
                if ("quit".equalsIgnoreCase(userInput)) {
                    System.out.println("正在断开与服务器的连接...");
                    break;
                }
            }

        } catch (UnknownHostException e) {
            System.err.println("无法连接到服务器：" + serverAddress);
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("与服务器通信时发生错误");
            e.printStackTrace();
        }
    }
}
